package com.yunlan.materia.utils;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Field;

/**
 * @author 罗显
 * @date 2025/9/18
 * @ApiNote
 */
@Slf4j
public class ObjectEmptyChecker {
    /**
     * 检查对象所有字段是否为空（支持基本类型和对象类型）
     * @param obj 待检查对象
     * @return 全部为空返回true，否则false
     */
    public static boolean isAllFieldsNull(Object obj)  {
        if (obj == null) {
            return true;
        }
        try{
            for (Field field : obj.getClass().getDeclaredFields()) {
                field.setAccessible(true); // 允许访问私有字段
                Object value = field.get(obj);

                // 处理基本类型默认值
                if (field.getType().isPrimitive()) {
                    if (value.equals(getPrimitiveDefault(field.getType()))) {
                        continue;
                    }
                    return false;
                }

                // 对象类型检查
                if (value != null) {
                    return false;
                }
            }
        }catch (Exception e){
            log.error("判断对象里的元素是否都是空值:{}",e.getMessage());
            return false;
        }
        return true;
    }

    private static Object getPrimitiveDefault(Class<?> type) {
        if (int.class.equals(type)) {
            return 0;
        }
        if (long.class.equals(type)) {
            return 0L;
        }
        if (boolean.class.equals(type)) {
            return false;
        }
        // 其他基本类型...
        return null;
    }
}
